package com.ouyu.factory.support;

import com.ouyu.factory.config.BeanDefinition;

import java.lang.reflect.Constructor;

/**
 * @program: trySpring
 * @description: definition strategy interface
 * @author: hz21056677
 * @create: 2021-08-05 15:51
 **/
public interface InstantiationStrategy {
    /**
     * 在实例化接口 instantiate 方法中添加必要的入参信息
     * @param beanDefinition bean的定义
     * @param beanName bean的名称
     * @param ctor 其中 Constructor 你可能会有一点陌生，它是 java.lang.reflect 包下的 Constructor 类，里面包含了一些必要的类信息，有这个参数的目的就是为了拿到符合入参信息相对应的构造函数。
     * @param args 构造参数 具体的入参信息了，最终实例化时候会用到。
     * @return object
     */
    Object instantiate(BeanDefinition beanDefinition, String beanName, Constructor ctor,Object[] args);
}
